package luanluan.data.resource 
{
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	import flash.utils.ByteArray;
	import luanluan.events.EventCenter;
	import luanluan.events.ResEvent;
	/**
	 * 资源加载信息
	 * @author luanluan
	 */
	public class ResLoadInfo 
	{
		//	*加载完成处理函数
		public var completeCallBack:Function = null;
		
		//	*所加载的文件的路径
		private var _url:String;
		
		//	*是否加载完成
		private var _loadComplete:Boolean = false;
		
		//	*用来加载的Loader对象
		private var _loader:Loader;
		
		//	*加载用context对象
		private var _context:LoaderContext;
		
		//	*所加载文件的二进制数据
		private var _data:ByteArray;
		
		/**
		 * 储存加载资源的信息
		 * @param	url
		 */
		public function ResLoadInfo(url:String) 
		{
			_url = url;
			_loader = new Loader();
			_context = new LoaderContext(false , ApplicationDomain.currentDomain);
		}
		
		/**
		 * 开始加载
		 */
		public function start():void
		{
			_loader.contentLoaderInfo.addEventListener(Event.COMPLETE , loadCompleteHandler);
			_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR , ioErrorHandler);
			_loader.load(new URLRequest(_url) , _context);
		}
		
		/**
		 * 发生IO错误
		 * @param	e
		 */
		private function ioErrorHandler(e:IOErrorEvent):void 
		{
			EventCenter.dispatchEvent(new IOErrorEvent(IOErrorEvent.IO_ERROR));
		}
		
		/**
		 * 加载完成
		 * @param	e
		 */
		private function loadCompleteHandler(e:Event):void 
		{
			if (completeCallBack != null)
				completeCallBack();
			_loadComplete = true;
			_data = e.currentTarget.bytes;
			//_loader.loadBytes(_data , _context);
		}
		
		/**
		 * 获取已加载数据
		 */
		public function get data():ByteArray 
		{
			if (!_loadComplete)
				throw new Error("数据尚未加载完成");
			return _data;
		}
	}

}